{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kNlvtfiBS4rk"
      },
      "source": [
        "对应 `tf.keras` 的01~02章节"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:45.815334Z",
          "start_time": "2025-02-19T08:18:45.662163Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "NZQV5Mh5S4rm",
        "outputId": "3514a37a-6866-4915-c393-f4b99c9bdb8f"
      },
      "source": [
        "import matplotlib as mpl\n",
        "import matplotlib.pyplot as plt\n",
        "%matplotlib inline\n",
        "import numpy as np\n",
        "import sklearn\n",
        "import pandas as pd\n",
        "import os\n",
        "import sys\n",
        "import time\n",
        "from tqdm.auto import tqdm\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.nn.functional as F\n",
        "\n",
        "print(sys.version_info)\n",
        "for module in mpl, np, pd, sklearn, torch:\n",
        "    print(module.__name__, module.__version__)\n",
        "\n",
        "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
        "print(device)\n"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "sys.version_info(major=3, minor=11, micro=11, releaselevel='final', serial=0)\n",
            "matplotlib 3.10.0\n",
            "numpy 1.26.4\n",
            "pandas 2.2.2\n",
            "sklearn 1.6.1\n",
            "torch 2.5.1+cu124\n",
            "cuda:0\n"
          ]
        }
      ],
      "execution_count": 2
    },
    {
      "cell_type": "code",
      "source": [
        "28*28"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:45.963726Z",
          "start_time": "2025-02-19T08:18:45.957376Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GuvHBv-WS4ro",
        "outputId": "226ea957-b796-43a4-de89-d78bfbfdb7c4"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "784"
            ]
          },
          "metadata": {},
          "execution_count": 3
        }
      ],
      "execution_count": 3
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Oa6u1iPBS4ro"
      },
      "source": [
        "## 数据准备"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.025846Z",
          "start_time": "2025-02-19T08:18:46.004127Z"
        },
        "id": "bAbVuNXJS4ro",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "c2714353-33fa-436d-ea7e-a9bcf6abb000"
      },
      "source": [
        "from torchvision import datasets\n",
        "from torchvision.transforms import ToTensor\n",
        "from torchvision import transforms\n",
        "\n",
        "\n",
        "# 定义数据集的变换\n",
        "transform = transforms.Compose([\n",
        "    transforms.ToTensor(), # 转换为tensor，进行归一化\n",
        "    # transforms.Normalize(mean, std) # 标准化，mean和std是数据集的均值和方差\n",
        "])\n",
        "# fashion_mnist图像分类数据集，衣服分类，60000张训练图片，10000张测试图片\n",
        "train_ds = datasets.FashionMNIST(\n",
        "    root=\"data\",\n",
        "    train=True,\n",
        "    download=True,\n",
        "    transform=transform\n",
        ")\n",
        "\n",
        "test_ds = datasets.FashionMNIST(\n",
        "    root=\"data\",\n",
        "    train=False,\n",
        "    download=True,\n",
        "    transform=transform\n",
        ")\n",
        "\n",
        "# torchvision 数据集里没有提供训练集和验证集的划分\n",
        "# 当然也可以用 torch.utils.data.Dataset 实现人为划分"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz to data/FashionMNIST/raw/train-images-idx3-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 26.4M/26.4M [00:02<00:00, 12.6MB/s]\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/train-images-idx3-ubyte.gz to data/FashionMNIST/raw\n",
            "\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw/train-labels-idx1-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 29.5k/29.5k [00:00<00:00, 197kB/s]\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw\n",
            "\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 4.42M/4.42M [00:01<00:00, 3.67MB/s]\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw\n",
            "\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 5.15k/5.15k [00:00<00:00, 11.9MB/s]"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw\n",
            "\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "\n"
          ]
        }
      ],
      "execution_count": 9
    },
    {
      "cell_type": "code",
      "source": [
        "type(train_ds)"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.248780Z",
          "start_time": "2025-02-19T08:18:46.231139Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "id": "CtjeyOKdS4rp",
        "outputId": "7a512ad2-21ec-4655-fa4c-7bd901564a5e"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "torchvision.datasets.mnist.FashionMNIST"
            ],
            "text/html": [
              "<div style=\"max-width:800px; border: 1px solid var(--colab-border-color);\"><style>\n",
              "      pre.function-repr-contents {\n",
              "        overflow-x: auto;\n",
              "        padding: 8px 12px;\n",
              "        max-height: 500px;\n",
              "      }\n",
              "\n",
              "      pre.function-repr-contents.function-repr-contents-collapsed {\n",
              "        cursor: pointer;\n",
              "        max-height: 100px;\n",
              "      }\n",
              "    </style>\n",
              "    <pre style=\"white-space: initial; background:\n",
              "         var(--colab-secondary-surface-color); padding: 8px 12px;\n",
              "         border-bottom: 1px solid var(--colab-border-color);\"><b>torchvision.datasets.mnist.FashionMNIST</b><br/>def __init__(root: Union[str, Path], train: bool=True, transform: Optional[Callable]=None, target_transform: Optional[Callable]=None, download: bool=False) -&gt; None</pre><pre class=\"function-repr-contents function-repr-contents-collapsed\" style=\"\"><a class=\"filepath\" style=\"display:none\" href=\"#\">/usr/local/lib/python3.11/dist-packages/torchvision/datasets/mnist.py</a>`Fashion-MNIST &lt;https://github.com/zalandoresearch/fashion-mnist&gt;`_ Dataset.\n",
              "\n",
              "Args:\n",
              "    root (str or ``pathlib.Path``): Root directory of dataset where ``FashionMNIST/raw/train-images-idx3-ubyte``\n",
              "        and  ``FashionMNIST/raw/t10k-images-idx3-ubyte`` exist.\n",
              "    train (bool, optional): If True, creates dataset from ``train-images-idx3-ubyte``,\n",
              "        otherwise from ``t10k-images-idx3-ubyte``.\n",
              "    download (bool, optional): If True, downloads the dataset from the internet and\n",
              "        puts it in root directory. If dataset is already downloaded, it is not\n",
              "        downloaded again.\n",
              "    transform (callable, optional): A function/transform that  takes in a PIL image\n",
              "        and returns a transformed version. E.g, ``transforms.RandomCrop``\n",
              "    target_transform (callable, optional): A function/transform that takes in the\n",
              "        target and transforms it.</pre>\n",
              "      <script>\n",
              "      if (google.colab.kernel.accessAllowed && google.colab.files && google.colab.files.view) {\n",
              "        for (const element of document.querySelectorAll('.filepath')) {\n",
              "          element.style.display = 'block'\n",
              "          element.onclick = (event) => {\n",
              "            event.preventDefault();\n",
              "            event.stopPropagation();\n",
              "            google.colab.files.view(element.textContent, 203);\n",
              "          };\n",
              "        }\n",
              "      }\n",
              "      for (const element of document.querySelectorAll('.function-repr-contents')) {\n",
              "        element.onclick = (event) => {\n",
              "          event.preventDefault();\n",
              "          event.stopPropagation();\n",
              "          element.classList.toggle('function-repr-contents-collapsed');\n",
              "        };\n",
              "      }\n",
              "      </script>\n",
              "      </div>"
            ]
          },
          "metadata": {},
          "execution_count": 10
        }
      ],
      "execution_count": 10
    },
    {
      "cell_type": "code",
      "source": [
        "len(train_ds)"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.286550Z",
          "start_time": "2025-02-19T08:18:46.271716Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "T9-qA98-S4rp",
        "outputId": "3aad7a15-e151-4ea1-ee17-d4a8608ce338"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "60000"
            ]
          },
          "metadata": {},
          "execution_count": 11
        }
      ],
      "execution_count": 11
    },
    {
      "cell_type": "code",
      "source": [
        "type(train_ds[0])"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.365721Z",
          "start_time": "2025-02-19T08:18:46.346425Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "fqxHV16uS4rp",
        "outputId": "05b6b549-df31-4bd3-cb35-f77e5130d7a2"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tuple"
            ]
          },
          "metadata": {},
          "execution_count": 12
        }
      ],
      "execution_count": 12
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.410119Z",
          "start_time": "2025-02-19T08:18:46.393642Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GMfWL_tkS4rp",
        "outputId": "fecbdbc8-2587-4fa7-f120-f1b4a490dba9"
      },
      "source": [
        "# 通过id取数据，取到的是一个元祖,是第一个样本,在训练时，把特征和标签分开\n",
        "img, label = train_ds[0]\n",
        "img.shape\n",
        "# img.shape = (1, 28, 28)，这是因为通道数在最前面"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "torch.Size([1, 28, 28])"
            ]
          },
          "metadata": {},
          "execution_count": 13
        }
      ],
      "execution_count": 13
    },
    {
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.466307Z",
          "start_time": "2025-02-19T08:18:46.451995Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "sFqpG5gzS4rp",
        "outputId": "cb7fbf93-8314-4dfd-fc50-570b348df7dc"
      },
      "cell_type": "code",
      "source": [
        "type(img) #tensor中文是 张量,和numpy的ndarray类似"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "torch.Tensor"
            ]
          },
          "metadata": {},
          "execution_count": 14
        }
      ],
      "execution_count": 14
    },
    {
      "cell_type": "code",
      "source": [
        "img[0]"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.507570Z",
          "start_time": "2025-02-19T08:18:46.495233Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DOtH1txtS4rp",
        "outputId": "bf92d4c6-7397-48a9-8dbd-8ffb99dc17c9"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tensor([[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0510, 0.2863, 0.0000,\n",
              "         0.0000, 0.0039, 0.0157, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0039,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0118, 0.0000, 0.1412, 0.5333, 0.4980, 0.2431,\n",
              "         0.2118, 0.0000, 0.0000, 0.0000, 0.0039, 0.0118, 0.0157, 0.0000, 0.0000,\n",
              "         0.0118],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0235, 0.0000, 0.4000, 0.8000, 0.6902, 0.5255,\n",
              "         0.5647, 0.4824, 0.0902, 0.0000, 0.0000, 0.0000, 0.0000, 0.0471, 0.0392,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.6078, 0.9255, 0.8118, 0.6980,\n",
              "         0.4196, 0.6118, 0.6314, 0.4275, 0.2510, 0.0902, 0.3020, 0.5098, 0.2824,\n",
              "         0.0588],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0039, 0.0000, 0.2706, 0.8118, 0.8745, 0.8549, 0.8471,\n",
              "         0.8471, 0.6392, 0.4980, 0.4745, 0.4784, 0.5725, 0.5529, 0.3451, 0.6745,\n",
              "         0.2588],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0039, 0.0039, 0.0039, 0.0000, 0.7843, 0.9098, 0.9098, 0.9137, 0.8980,\n",
              "         0.8745, 0.8745, 0.8431, 0.8353, 0.6431, 0.4980, 0.4824, 0.7686, 0.8980,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.7176, 0.8824, 0.8471, 0.8745, 0.8941,\n",
              "         0.9216, 0.8902, 0.8784, 0.8706, 0.8784, 0.8667, 0.8745, 0.9608, 0.6784,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.7569, 0.8941, 0.8549, 0.8353, 0.7765,\n",
              "         0.7059, 0.8314, 0.8235, 0.8275, 0.8353, 0.8745, 0.8627, 0.9529, 0.7922,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0039, 0.0118, 0.0000, 0.0471, 0.8588, 0.8627, 0.8314, 0.8549, 0.7529,\n",
              "         0.6627, 0.8902, 0.8157, 0.8549, 0.8784, 0.8314, 0.8863, 0.7725, 0.8196,\n",
              "         0.2039],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0235, 0.0000, 0.3882, 0.9569, 0.8706, 0.8627, 0.8549, 0.7961,\n",
              "         0.7765, 0.8667, 0.8431, 0.8353, 0.8706, 0.8627, 0.9608, 0.4667, 0.6549,\n",
              "         0.2196],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0157, 0.0000, 0.0000, 0.2157, 0.9255, 0.8941, 0.9020, 0.8941, 0.9412,\n",
              "         0.9098, 0.8353, 0.8549, 0.8745, 0.9176, 0.8510, 0.8510, 0.8196, 0.3608,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0039, 0.0157, 0.0235, 0.0275, 0.0078, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.9294, 0.8863, 0.8510, 0.8745, 0.8706, 0.8588,\n",
              "         0.8706, 0.8667, 0.8471, 0.8745, 0.8980, 0.8431, 0.8549, 1.0000, 0.3020,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0118, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.2431, 0.5686, 0.8000, 0.8941, 0.8118, 0.8353, 0.8667, 0.8549, 0.8157,\n",
              "         0.8275, 0.8549, 0.8784, 0.8745, 0.8588, 0.8431, 0.8784, 0.9569, 0.6235,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.1725, 0.3216, 0.4196, 0.7412,\n",
              "         0.8941, 0.8627, 0.8706, 0.8510, 0.8863, 0.7843, 0.8039, 0.8275, 0.9020,\n",
              "         0.8784, 0.9176, 0.6902, 0.7373, 0.9804, 0.9725, 0.9137, 0.9333, 0.8431,\n",
              "         0.0000],\n",
              "        [0.0000, 0.2235, 0.7333, 0.8157, 0.8784, 0.8667, 0.8784, 0.8157, 0.8000,\n",
              "         0.8392, 0.8157, 0.8196, 0.7843, 0.6235, 0.9608, 0.7569, 0.8078, 0.8745,\n",
              "         1.0000, 1.0000, 0.8667, 0.9176, 0.8667, 0.8275, 0.8627, 0.9098, 0.9647,\n",
              "         0.0000],\n",
              "        [0.0118, 0.7922, 0.8941, 0.8784, 0.8667, 0.8275, 0.8275, 0.8392, 0.8039,\n",
              "         0.8039, 0.8039, 0.8627, 0.9412, 0.3137, 0.5882, 1.0000, 0.8980, 0.8667,\n",
              "         0.7373, 0.6039, 0.7490, 0.8235, 0.8000, 0.8196, 0.8706, 0.8941, 0.8824,\n",
              "         0.0000],\n",
              "        [0.3843, 0.9137, 0.7765, 0.8235, 0.8706, 0.8980, 0.8980, 0.9176, 0.9765,\n",
              "         0.8627, 0.7608, 0.8431, 0.8510, 0.9451, 0.2549, 0.2863, 0.4157, 0.4588,\n",
              "         0.6588, 0.8588, 0.8667, 0.8431, 0.8510, 0.8745, 0.8745, 0.8784, 0.8980,\n",
              "         0.1137],\n",
              "        [0.2941, 0.8000, 0.8314, 0.8000, 0.7569, 0.8039, 0.8275, 0.8824, 0.8471,\n",
              "         0.7255, 0.7725, 0.8078, 0.7765, 0.8353, 0.9412, 0.7647, 0.8902, 0.9608,\n",
              "         0.9373, 0.8745, 0.8549, 0.8314, 0.8196, 0.8706, 0.8627, 0.8667, 0.9020,\n",
              "         0.2627],\n",
              "        [0.1882, 0.7961, 0.7176, 0.7608, 0.8353, 0.7725, 0.7255, 0.7451, 0.7608,\n",
              "         0.7529, 0.7922, 0.8392, 0.8588, 0.8667, 0.8627, 0.9255, 0.8824, 0.8471,\n",
              "         0.7804, 0.8078, 0.7294, 0.7098, 0.6941, 0.6745, 0.7098, 0.8039, 0.8078,\n",
              "         0.4510],\n",
              "        [0.0000, 0.4784, 0.8588, 0.7569, 0.7020, 0.6706, 0.7176, 0.7686, 0.8000,\n",
              "         0.8235, 0.8353, 0.8118, 0.8275, 0.8235, 0.7843, 0.7686, 0.7608, 0.7490,\n",
              "         0.7647, 0.7490, 0.7765, 0.7529, 0.6902, 0.6118, 0.6549, 0.6941, 0.8235,\n",
              "         0.3608],\n",
              "        [0.0000, 0.0000, 0.2902, 0.7412, 0.8314, 0.7490, 0.6863, 0.6745, 0.6863,\n",
              "         0.7098, 0.7255, 0.7373, 0.7412, 0.7373, 0.7569, 0.7765, 0.8000, 0.8196,\n",
              "         0.8235, 0.8235, 0.8275, 0.7373, 0.7373, 0.7608, 0.7529, 0.8471, 0.6667,\n",
              "         0.0000],\n",
              "        [0.0078, 0.0000, 0.0000, 0.0000, 0.2588, 0.7843, 0.8706, 0.9294, 0.9373,\n",
              "         0.9490, 0.9647, 0.9529, 0.9569, 0.8667, 0.8627, 0.7569, 0.7490, 0.7020,\n",
              "         0.7137, 0.7137, 0.7098, 0.6902, 0.6510, 0.6588, 0.3882, 0.2275, 0.0000,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1569, 0.2392,\n",
              "         0.1725, 0.2824, 0.1608, 0.1373, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000],\n",
              "        [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "         0.0000]])"
            ]
          },
          "metadata": {},
          "execution_count": 15
        }
      ],
      "execution_count": 15
    },
    {
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.571548Z",
          "start_time": "2025-02-19T08:18:46.552447Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ol5cR4WyS4rq",
        "outputId": "356ba309-a824-4f69-af83-f3a03a33d69c"
      },
      "cell_type": "code",
      "source": [
        "img"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0510,\n",
              "          0.2863, 0.0000, 0.0000, 0.0039, 0.0157, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0039, 0.0039, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0118, 0.0000, 0.1412, 0.5333,\n",
              "          0.4980, 0.2431, 0.2118, 0.0000, 0.0000, 0.0000, 0.0039, 0.0118,\n",
              "          0.0157, 0.0000, 0.0000, 0.0118],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0235, 0.0000, 0.4000, 0.8000,\n",
              "          0.6902, 0.5255, 0.5647, 0.4824, 0.0902, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0471, 0.0392, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.6078, 0.9255,\n",
              "          0.8118, 0.6980, 0.4196, 0.6118, 0.6314, 0.4275, 0.2510, 0.0902,\n",
              "          0.3020, 0.5098, 0.2824, 0.0588],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.2706, 0.8118, 0.8745,\n",
              "          0.8549, 0.8471, 0.8471, 0.6392, 0.4980, 0.4745, 0.4784, 0.5725,\n",
              "          0.5529, 0.3451, 0.6745, 0.2588],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0039, 0.0039, 0.0039, 0.0000, 0.7843, 0.9098, 0.9098,\n",
              "          0.9137, 0.8980, 0.8745, 0.8745, 0.8431, 0.8353, 0.6431, 0.4980,\n",
              "          0.4824, 0.7686, 0.8980, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7176, 0.8824, 0.8471,\n",
              "          0.8745, 0.8941, 0.9216, 0.8902, 0.8784, 0.8706, 0.8784, 0.8667,\n",
              "          0.8745, 0.9608, 0.6784, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7569, 0.8941, 0.8549,\n",
              "          0.8353, 0.7765, 0.7059, 0.8314, 0.8235, 0.8275, 0.8353, 0.8745,\n",
              "          0.8627, 0.9529, 0.7922, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0039, 0.0118, 0.0000, 0.0471, 0.8588, 0.8627, 0.8314,\n",
              "          0.8549, 0.7529, 0.6627, 0.8902, 0.8157, 0.8549, 0.8784, 0.8314,\n",
              "          0.8863, 0.7725, 0.8196, 0.2039],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0235, 0.0000, 0.3882, 0.9569, 0.8706, 0.8627,\n",
              "          0.8549, 0.7961, 0.7765, 0.8667, 0.8431, 0.8353, 0.8706, 0.8627,\n",
              "          0.9608, 0.4667, 0.6549, 0.2196],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0157, 0.0000, 0.0000, 0.2157, 0.9255, 0.8941, 0.9020,\n",
              "          0.8941, 0.9412, 0.9098, 0.8353, 0.8549, 0.8745, 0.9176, 0.8510,\n",
              "          0.8510, 0.8196, 0.3608, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0039, 0.0157, 0.0235, 0.0275, 0.0078, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.9294, 0.8863, 0.8510, 0.8745,\n",
              "          0.8706, 0.8588, 0.8706, 0.8667, 0.8471, 0.8745, 0.8980, 0.8431,\n",
              "          0.8549, 1.0000, 0.3020, 0.0000],\n",
              "         [0.0000, 0.0118, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.2431, 0.5686, 0.8000, 0.8941, 0.8118, 0.8353, 0.8667,\n",
              "          0.8549, 0.8157, 0.8275, 0.8549, 0.8784, 0.8745, 0.8588, 0.8431,\n",
              "          0.8784, 0.9569, 0.6235, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.1725, 0.3216, 0.4196,\n",
              "          0.7412, 0.8941, 0.8627, 0.8706, 0.8510, 0.8863, 0.7843, 0.8039,\n",
              "          0.8275, 0.9020, 0.8784, 0.9176, 0.6902, 0.7373, 0.9804, 0.9725,\n",
              "          0.9137, 0.9333, 0.8431, 0.0000],\n",
              "         [0.0000, 0.2235, 0.7333, 0.8157, 0.8784, 0.8667, 0.8784, 0.8157,\n",
              "          0.8000, 0.8392, 0.8157, 0.8196, 0.7843, 0.6235, 0.9608, 0.7569,\n",
              "          0.8078, 0.8745, 1.0000, 1.0000, 0.8667, 0.9176, 0.8667, 0.8275,\n",
              "          0.8627, 0.9098, 0.9647, 0.0000],\n",
              "         [0.0118, 0.7922, 0.8941, 0.8784, 0.8667, 0.8275, 0.8275, 0.8392,\n",
              "          0.8039, 0.8039, 0.8039, 0.8627, 0.9412, 0.3137, 0.5882, 1.0000,\n",
              "          0.8980, 0.8667, 0.7373, 0.6039, 0.7490, 0.8235, 0.8000, 0.8196,\n",
              "          0.8706, 0.8941, 0.8824, 0.0000],\n",
              "         [0.3843, 0.9137, 0.7765, 0.8235, 0.8706, 0.8980, 0.8980, 0.9176,\n",
              "          0.9765, 0.8627, 0.7608, 0.8431, 0.8510, 0.9451, 0.2549, 0.2863,\n",
              "          0.4157, 0.4588, 0.6588, 0.8588, 0.8667, 0.8431, 0.8510, 0.8745,\n",
              "          0.8745, 0.8784, 0.8980, 0.1137],\n",
              "         [0.2941, 0.8000, 0.8314, 0.8000, 0.7569, 0.8039, 0.8275, 0.8824,\n",
              "          0.8471, 0.7255, 0.7725, 0.8078, 0.7765, 0.8353, 0.9412, 0.7647,\n",
              "          0.8902, 0.9608, 0.9373, 0.8745, 0.8549, 0.8314, 0.8196, 0.8706,\n",
              "          0.8627, 0.8667, 0.9020, 0.2627],\n",
              "         [0.1882, 0.7961, 0.7176, 0.7608, 0.8353, 0.7725, 0.7255, 0.7451,\n",
              "          0.7608, 0.7529, 0.7922, 0.8392, 0.8588, 0.8667, 0.8627, 0.9255,\n",
              "          0.8824, 0.8471, 0.7804, 0.8078, 0.7294, 0.7098, 0.6941, 0.6745,\n",
              "          0.7098, 0.8039, 0.8078, 0.4510],\n",
              "         [0.0000, 0.4784, 0.8588, 0.7569, 0.7020, 0.6706, 0.7176, 0.7686,\n",
              "          0.8000, 0.8235, 0.8353, 0.8118, 0.8275, 0.8235, 0.7843, 0.7686,\n",
              "          0.7608, 0.7490, 0.7647, 0.7490, 0.7765, 0.7529, 0.6902, 0.6118,\n",
              "          0.6549, 0.6941, 0.8235, 0.3608],\n",
              "         [0.0000, 0.0000, 0.2902, 0.7412, 0.8314, 0.7490, 0.6863, 0.6745,\n",
              "          0.6863, 0.7098, 0.7255, 0.7373, 0.7412, 0.7373, 0.7569, 0.7765,\n",
              "          0.8000, 0.8196, 0.8235, 0.8235, 0.8275, 0.7373, 0.7373, 0.7608,\n",
              "          0.7529, 0.8471, 0.6667, 0.0000],\n",
              "         [0.0078, 0.0000, 0.0000, 0.0000, 0.2588, 0.7843, 0.8706, 0.9294,\n",
              "          0.9373, 0.9490, 0.9647, 0.9529, 0.9569, 0.8667, 0.8627, 0.7569,\n",
              "          0.7490, 0.7020, 0.7137, 0.7137, 0.7098, 0.6902, 0.6510, 0.6588,\n",
              "          0.3882, 0.2275, 0.0000, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1569,\n",
              "          0.2392, 0.1725, 0.2824, 0.1608, 0.1373, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000],\n",
              "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
              "          0.0000, 0.0000, 0.0000, 0.0000]]])"
            ]
          },
          "metadata": {},
          "execution_count": 16
        }
      ],
      "execution_count": 16
    },
    {
      "cell_type": "code",
      "source": [
        "#计算均值和方差\n",
        "def cal_mean_std(ds):\n",
        "    mean = 0.\n",
        "    std = 0.\n",
        "    for img, _ in ds: # 遍历每张图片,img.shape=[1,28,28]\n",
        "        mean += img.mean(dim=(1, 2))\n",
        "        std += img.std(dim=(1, 2))\n",
        "    mean /= len(ds)\n",
        "    std /= len(ds)\n",
        "    return mean, std\n",
        "\n",
        "\n",
        "print(cal_mean_std(train_ds))\n"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.607778Z",
          "start_time": "2025-02-19T08:18:46.587498Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "iyIkzc7cS4rq",
        "outputId": "57e14bf8-d2f2-420c-e7bc-ba98929c5e7d"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(tensor([0.2860]), tensor([0.3205]))\n"
          ]
        }
      ],
      "execution_count": 17
    },
    {
      "cell_type": "code",
      "source": [
        "type(img)"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.683203Z",
          "start_time": "2025-02-19T08:18:46.666926Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "x77lwocfS4rq",
        "outputId": "8c48403b-1120-4fcb-b431-1bab067201a9"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "torch.Tensor"
            ]
          },
          "metadata": {},
          "execution_count": 18
        }
      ],
      "execution_count": 18
    },
    {
      "cell_type": "code",
      "source": [
        "label"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.746469Z",
          "start_time": "2025-02-19T08:18:46.727362Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "lyiXQlj5S4rq",
        "outputId": "138960c0-588c-4b15-d387-e5a6d98bcee0"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "9"
            ]
          },
          "metadata": {},
          "execution_count": 19
        }
      ],
      "execution_count": 19
    },
    {
      "cell_type": "code",
      "source": [
        "type(img) #tensor中文是 张量,和numpy的ndarray类似"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.786504Z",
          "start_time": "2025-02-19T08:18:46.768405Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nhFsJ7HdS4rq",
        "outputId": "10559f16-4f6c-4f7d-be53-8e0a9eebb586"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "torch.Tensor"
            ]
          },
          "metadata": {},
          "execution_count": 20
        }
      ],
      "execution_count": 20
    },
    {
      "cell_type": "code",
      "source": [
        "label"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.856938Z",
          "start_time": "2025-02-19T08:18:46.841887Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZrBBmqA1S4rq",
        "outputId": "5948335f-a7cd-4dc0-da6c-b8855ccb767a"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "9"
            ]
          },
          "metadata": {},
          "execution_count": 21
        }
      ],
      "execution_count": 21
    },
    {
      "cell_type": "code",
      "source": [
        "# 显示图片，这里需要把transforms.ToTensor(),进行归一化注释掉，否则是不行的\n",
        "def show_img_content(img):\n",
        "    from PIL import Image\n",
        "\n",
        "    # 打开一个图像文件\n",
        "    # img = Image.open(img)\n",
        "\n",
        "\n",
        "    print(\"图像大小:\", img.size)\n",
        "    print(\"图像模式:\", img.mode)\n",
        "\n",
        "\n",
        "    # 如果图像是单通道的，比如灰度图，你可以这样获取像素值列表：\n",
        "    if img.mode == 'L':\n",
        "        pixel_values = list(img.getdata())\n",
        "        print(pixel_values)\n",
        "show_img_content(img) #这里必须把上面的 transforms.ToTensor(), # 转换为tensor，进行归一化注释掉，否则是不行的"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.900816Z",
          "start_time": "2025-02-19T08:18:46.881867Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2lwU1JTPS4rr",
        "outputId": "5821e3ad-014c-429c-f05c-4f03d7d65323"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "图像大小: <built-in method size of Tensor object at 0x7b24b5af3f50>\n",
            "图像模式: <built-in method mode of Tensor object at 0x7b24b5af3f50>\n"
          ]
        }
      ],
      "execution_count": 22
    },
    {
      "cell_type": "code",
      "source": [
        "#这个代码必须是注释了上面的 transforms.ToTensor()才能够运行的\n",
        "def show_single_image(img_arr):\n",
        "    img_arr = img_arr.numpy() # Convert to NumPy\n",
        "    img_arr = np.transpose(img_arr, (1, 2, 0))\n",
        "    plt.imshow(img_arr, cmap=\"binary\") # 显示图片\n",
        "    plt.colorbar() # 显示颜色条\n",
        "    plt.show()\n",
        "\n",
        "\n",
        "show_single_image(img)"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.938179Z",
          "start_time": "2025-02-19T08:18:46.923051Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 435
        },
        "id": "FbXSjRgWS4rr",
        "outputId": "88477f0f-59a9-41e9-a0bb-5bf161588d77"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ],
      "execution_count": 25
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:46.985769Z",
          "start_time": "2025-02-19T08:18:46.958123Z"
        },
        "id": "XtaNhDACS4rr",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 413
        },
        "outputId": "0ddfd26f-3699-49dd-9e23-bd0083a80ea7"
      },
      "source": [
        "def show_imgs(n_rows, n_cols, train_ds, class_names):\n",
        "    assert n_rows * n_cols < len(train_ds)  #确保打印的图片小于总样本数\n",
        "    plt.figure(figsize = (n_cols * 1.4, n_rows * 1.6))  #宽1.4高1.6，宽，高\n",
        "    for row in range(n_rows):\n",
        "        for col in range(n_cols):\n",
        "            index = n_cols * row + col  # 计算索引，从0开始\n",
        "            plt.subplot(n_rows, n_cols, index+1)#因为从1开始\n",
        "            img_arr, label = train_ds[index]\n",
        "            img_arr = np.transpose(img_arr, (1, 2, 0))  # 通道换到最后一维\n",
        "            plt.imshow(img_arr, cmap=\"binary\",\n",
        "                       interpolation = 'nearest')#interpolation='nearest'是临近插值\n",
        "            plt.axis('off')#去除坐标系\n",
        "            plt.title(class_names[label]) # 显示类别名称\n",
        "    plt.show()\n",
        "\n",
        "\n",
        "\n",
        "#已知的图片类别\n",
        "# lables在这个路径https://github.com/zalandoresearch/fashion-mnist\n",
        "class_names = ['T-shirt', 'Trouser', 'Pullover', 'Dress',\n",
        "               'Coat', 'Sandal', 'Shirt', 'Sneaker',\n",
        "               'Bag', 'Ankle boot'] #0-9分别代表的类别\n",
        "#只是打印了前15个样本\n",
        "show_imgs(3, 5, train_ds, class_names)\n"
      ],
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 700x480 with 15 Axes>"
            ],
            "image/png": "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gxAcHIyEhATz9w8//BAxMTEoXLgwSpUqhTvvvBM///yz9dlWrVqhXr162LBhA2666SZcffXVePLJJy95T7/CNehPAl2X06ZNQ5s2bRAREYGQkBDUqVMHkyZNSvOZKlWqoFOnTli5ciWaNGmC0NBQVKtWDR988EGattu2bUObNm1QuHBhVKxYEc899xxSUlLStJs7dy46duyIyMhIhISEIDo6Gs8++6w1nvkZjmHmkaMbmT179gAASpcunenXHjVqFIYMGYLIyEiMGzcOt99+O6ZMmYJbbrkFf/75JwCgV69eOHv2LP73v/9Znz137hzmz5+PHj16oECBAgCA6dOno2PHjihSpAjGjBmDp556Cj/88ANatGiRxjnqwoULiIuLQ0REBMaOHYvbb789079fdhEVFYUNGzbg+++/v2TblStX4qGHHsKdd96Jl156CX/88Qduv/12HDt2zLQ5dOgQmjVrhmXLlmHo0KF49dVXUb16ddx333145ZVXTLvTp0/j7bffRqtWrTBmzBiMGjUKR44cQVxcHDZt2uTah4sXL6J///744IMPMGfOHHTv3h3AX//66du3L2rUqIHx48dj2LBh+Pzzz3HTTTdZP6wAcOzYMbRv3x4NGzbEK6+8gtatW1/WM/MTXIP+JNB1OWnSJERFReHJJ5/EuHHjUKlSJTz00EN4880307TdvXs3evTogZtvvhnjxo1DyZIl0b9/f2ujePDgQbRu3RqbNm3CiBEjMGzYMHzwwQd49dVX01zvvffeQ5EiRfD3v/8dr776KmJiYvD0009jxIgRV/4A8gAcw0zEyQamTZvmAHCWLVvmHDlyxPn555+dGTNmOKVLl3YKFy7s/PLLL05sbKwTGxub5rP9+vVzoqKirL8BcEaOHJnm+omJiY7jOM7hw4ed4OBg55ZbbnEuXrxo2r3xxhsOAOfdd991HMdxUlJSnAoVKji33367df1Zs2Y5AJyvvvrKcRzHSUpKckqUKOEMHDjQanfw4EGnePHi1t/79evnAHBGjBhxuY8pV/LZZ585BQoUcAoUKOA0b97cGT58uLNkyRInOTnZagfACQ4Odnbv3m3+tnnzZgeA8/rrr5u/3XfffU758uWdo0ePWp+/8847neLFizvnzp1zHMdxLly44Jw/f95qc+LECads2bLOgAEDzN8SExMdAM7LL7/s/Pnnn06v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\n"
          },
          "metadata": {}
        }
      ],
      "execution_count": 26
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.031644Z",
          "start_time": "2025-02-19T08:18:47.007708Z"
        },
        "id": "AvFRADP5S4rr"
      },
      "source": [
        "# 从数据集到dataloader\n",
        "train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True) #batch_size分批，shuffle洗牌\n",
        "val_loader = torch.utils.data.DataLoader(test_ds, batch_size=32, shuffle=False)"
      ],
      "outputs": [],
      "execution_count": 27
    },
    {
      "cell_type": "markdown",
      "source": [
        "在PyTorch中，`DataLoader`是一个迭代器，它封装了数据的加载和预处理过程，使得在训练机器学习模型时可以方便地批量加载数据。`DataLoader`主要负责以下几个方面：\n",
        "\n",
        "1. **批量加载数据**：`DataLoader`可以将数据集（Dataset）切分为更小的批次（batch），每次迭代提供一小批量数据，而不是单个数据点。这有助于模型学习数据中的统计依赖性，并且可以更高效地利用GPU等硬件的并行计算能力。\n",
        "\n",
        "2. **数据打乱**：默认情况下，`DataLoader`会在每个epoch（训练周期）开始时打乱数据的顺序。这有助于模型训练时避免陷入局部最优解，并且可以提高模型的泛化能力。\n",
        "\n",
        "3. **多线程数据加载**：`DataLoader`支持多线程（通过参数`num_workers`）来并行地加载数据，这可以显著减少训练过程中的等待时间，尤其是在处理大规模数据集时。\n",
        "\n",
        "4. **数据预处理**：`DataLoader`可以与`transforms`结合使用，对加载的数据进行预处理，如归一化、标准化、数据增强等操作。\n",
        "\n",
        "5. **内存管理**：`DataLoader`负责管理数据的内存使用，确保在训练过程中不会耗尽内存资源。\n",
        "\n",
        "6. **易用性**：`DataLoader`提供了一个简单的接口，可以很容易地集成到训练循环中。\n",
        "\n"
      ],
      "metadata": {
        "collapsed": false,
        "id": "0CsE3DsqS4rr"
      }
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "COifPDqTS4rr"
      },
      "source": [
        "## 定义模型"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.073679Z",
          "start_time": "2025-02-19T08:18:47.054583Z"
        },
        "id": "nELFTo99S4rr"
      },
      "source": [
        "class NeuralNetwork(nn.Module):\n",
        "    def __init__(self):\n",
        "        super().__init__() # 继承父类的初始化方法，子类有父类的属性\n",
        "        self.flatten = nn.Flatten()  # 展平层\n",
        "        self.linear_relu_stack = nn.Sequential(\n",
        "            nn.Linear(784, 300),  # in_features=784, out_features=300, 784是输入特征数，300是输出特征数\n",
        "            nn.ReLU(), # 激活函数\n",
        "            nn.Linear(300, 100),#隐藏层神经元数100\n",
        "            nn.ReLU(), # 激活函数\n",
        "            nn.Linear(100, 10),#输出层神经元数10\n",
        "        )\n",
        "\n",
        "    def forward(self, x): # 前向计算\n",
        "        # x.shape [batch size, 1, 28, 28]\n",
        "        x = self.flatten(x)\n",
        "        # 展平后 x.shape [batch size, 784]\n",
        "        logits = self.linear_relu_stack(x)\n",
        "        # logits.shape [batch size, 10]\n",
        "        return logits #没有经过softmax,称为logits\n",
        "\n",
        "model = NeuralNetwork()"
      ],
      "outputs": [],
      "execution_count": 28
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.135504Z",
          "start_time": "2025-02-19T08:18:47.118589Z"
        },
        "id": "uqGHMHXwS4rs",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "7ffa5932-3f1b-43b7-a78c-325ea4fc7898"
      },
      "source": [
        "# 看看网络结构\n",
        "model"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "NeuralNetwork(\n",
              "  (flatten): Flatten(start_dim=1, end_dim=-1)\n",
              "  (linear_relu_stack): Sequential(\n",
              "    (0): Linear(in_features=784, out_features=300, bias=True)\n",
              "    (1): ReLU()\n",
              "    (2): Linear(in_features=300, out_features=100, bias=True)\n",
              "    (3): ReLU()\n",
              "    (4): Linear(in_features=100, out_features=10, bias=True)\n",
              "  )\n",
              ")"
            ]
          },
          "metadata": {},
          "execution_count": 29
        }
      ],
      "execution_count": 29
    },
    {
      "cell_type": "code",
      "source": [
        "784*300+300+300*100+100+100*10+10"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.150462Z",
          "start_time": "2025-02-19T08:18:47.144477Z"
        },
        "id": "v9Sm6KO_S4rs",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "daa4f777-450a-4b65-f4b1-ffe68a68edd6"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "266610"
            ]
          },
          "metadata": {},
          "execution_count": 30
        }
      ],
      "execution_count": 30
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.188285Z",
          "start_time": "2025-02-19T08:18:47.174047Z"
        },
        "id": "P00fOixmS4rs",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "52b5740e-74bf-4de7-f859-4104552720af"
      },
      "source": [
        "for name, param in model.named_parameters(): # 打印模型参数\n",
        "      print(name, param.shape)"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "linear_relu_stack.0.weight torch.Size([300, 784])\n",
            "linear_relu_stack.0.bias torch.Size([300])\n",
            "linear_relu_stack.2.weight torch.Size([100, 300])\n",
            "linear_relu_stack.2.bias torch.Size([100])\n",
            "linear_relu_stack.4.weight torch.Size([10, 100])\n",
            "linear_relu_stack.4.bias torch.Size([10])\n"
          ]
        }
      ],
      "execution_count": 31
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.253053Z",
          "start_time": "2025-02-19T08:18:47.238742Z"
        },
        "id": "OFdJawXLS4rs",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "3da81ece-8c3e-47e4-c3e5-c9bd610ff324"
      },
      "source": [
        "# 看看模型参数\n",
        "list(model.parameters())  # 这种方法拿到模型的所有可学习参数,requires_grad=True\n"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[Parameter containing:\n",
              " tensor([[-0.0268,  0.0291, -0.0020,  ...,  0.0181, -0.0305, -0.0327],\n",
              "         [-0.0004,  0.0152, -0.0283,  ..., -0.0299,  0.0105,  0.0235],\n",
              "         [-0.0330, -0.0068, -0.0045,  ...,  0.0117, -0.0126,  0.0177],\n",
              "         ...,\n",
              "         [-0.0006,  0.0195,  0.0154,  ..., -0.0218, -0.0195,  0.0329],\n",
              "         [-0.0303, -0.0339,  0.0272,  ..., -0.0070, -0.0024, -0.0217],\n",
              "         [-0.0234,  0.0322, -0.0078,  ..., -0.0351,  0.0087,  0.0272]],\n",
              "        requires_grad=True),\n",
              " Parameter containing:\n",
              " tensor([-0.0071,  0.0197, -0.0083, -0.0311,  0.0250,  0.0259, -0.0296, -0.0198,\n",
              "         -0.0316, -0.0276, -0.0071,  0.0294, -0.0247, -0.0163,  0.0340,  0.0276,\n",
              "         -0.0181,  0.0320, -0.0237,  0.0250,  0.0202,  0.0230, -0.0099,  0.0034,\n",
              "         -0.0074,  0.0012, -0.0094, -0.0205,  0.0042,  0.0242, -0.0322, -0.0022,\n",
              "         -0.0177, -0.0215,  0.0266,  0.0301, -0.0166, -0.0290,  0.0356,  0.0278,\n",
              "         -0.0311,  0.0310,  0.0010,  0.0172, -0.0294,  0.0025, -0.0231, -0.0284,\n",
              "          0.0221, -0.0306,  0.0039, -0.0346,  0.0354, -0.0134,  0.0341,  0.0303,\n",
              "         -0.0006, -0.0153, -0.0353, -0.0346,  0.0197, -0.0279, -0.0218,  0.0251,\n",
              "         -0.0235,  0.0296,  0.0257, -0.0068,  0.0079,  0.0067,  0.0208,  0.0105,\n",
              "          0.0314,  0.0280,  0.0027, -0.0161, -0.0302,  0.0193, -0.0297,  0.0103,\n",
              "          0.0255,  0.0016,  0.0304, -0.0312,  0.0270,  0.0320, -0.0069, -0.0167,\n",
              "         -0.0100,  0.0341,  0.0229,  0.0239,  0.0074,  0.0028, -0.0267,  0.0147,\n",
              "          0.0143, -0.0326,  0.0319, -0.0086,  0.0327,  0.0046, -0.0292,  0.0061,\n",
              "         -0.0303, -0.0339, -0.0116,  0.0046,  0.0127,  0.0101,  0.0348, -0.0085,\n",
              "          0.0108, -0.0032, -0.0336,  0.0144, -0.0218,  0.0015,  0.0175,  0.0080,\n",
              "          0.0274, -0.0100, -0.0280, -0.0176, -0.0151, -0.0245,  0.0202, -0.0260,\n",
              "         -0.0258, -0.0169, -0.0346,  0.0037,  0.0049,  0.0034,  0.0115, -0.0169,\n",
              "          0.0244,  0.0256, -0.0078, -0.0074,  0.0212,  0.0072,  0.0275,  0.0202,\n",
              "         -0.0220,  0.0297,  0.0028, -0.0161, -0.0343,  0.0351, -0.0311,  0.0331,\n",
              "          0.0173, -0.0332, -0.0277, -0.0210, -0.0147,  0.0060,  0.0116,  0.0223,\n",
              "          0.0022, -0.0217, -0.0325,  0.0086, -0.0091, -0.0138, -0.0134,  0.0052,\n",
              "          0.0076,  0.0126, -0.0230,  0.0186, -0.0197, -0.0198,  0.0045,  0.0007,\n",
              "          0.0040, -0.0281, -0.0314,  0.0090,  0.0195, -0.0255,  0.0101, -0.0197,\n",
              "          0.0322, -0.0003,  0.0115, -0.0054, -0.0338,  0.0031,  0.0222, -0.0180,\n",
              "         -0.0114, -0.0020, -0.0073, -0.0221,  0.0049,  0.0117, -0.0310,  0.0189,\n",
              "          0.0333,  0.0214, -0.0175,  0.0278,  0.0319,  0.0026, -0.0298,  0.0034,\n",
              "         -0.0169,  0.0085, -0.0301, -0.0198, -0.0073,  0.0167,  0.0345,  0.0086,\n",
              "         -0.0198,  0.0329,  0.0044,  0.0246,  0.0303,  0.0226,  0.0121,  0.0256,\n",
              "         -0.0240, -0.0315, -0.0192,  0.0308, -0.0048, -0.0315,  0.0015, -0.0341,\n",
              "          0.0201,  0.0012,  0.0280,  0.0176,  0.0307, -0.0322,  0.0215,  0.0031,\n",
              "          0.0008, -0.0019,  0.0278, -0.0173, -0.0268,  0.0097,  0.0248, -0.0250,\n",
              "          0.0262, -0.0347,  0.0335, -0.0145, -0.0023,  0.0227,  0.0322, -0.0265,\n",
              "          0.0064, -0.0330,  0.0205, -0.0189,  0.0156, -0.0155,  0.0187, -0.0111,\n",
              "          0.0143, -0.0343,  0.0050,  0.0264,  0.0038, -0.0160,  0.0226, -0.0324,\n",
              "         -0.0232,  0.0243,  0.0084, -0.0189,  0.0166,  0.0024, -0.0267,  0.0225,\n",
              "          0.0295,  0.0039,  0.0218,  0.0179,  0.0177,  0.0102, -0.0343, -0.0020,\n",
              "         -0.0250, -0.0064, -0.0125, -0.0031, -0.0085,  0.0249,  0.0219,  0.0152,\n",
              "          0.0018, -0.0198, -0.0051, -0.0216], requires_grad=True),\n",
              " Parameter containing:\n",
              " tensor([[ 0.0336, -0.0252,  0.0287,  ...,  0.0427, -0.0219, -0.0507],\n",
              "         [-0.0144,  0.0281,  0.0138,  ..., -0.0125, -0.0312,  0.0305],\n",
              "         [-0.0235, -0.0408, -0.0535,  ...,  0.0563, -0.0408,  0.0104],\n",
              "         ...,\n",
              "         [-0.0035,  0.0262, -0.0370,  ..., -0.0425,  0.0361,  0.0178],\n",
              "         [-0.0214, -0.0132,  0.0470,  ..., -0.0108, -0.0168,  0.0497],\n",
              "         [-0.0273, -0.0437,  0.0181,  ..., -0.0193,  0.0417, -0.0198]],\n",
              "        requires_grad=True),\n",
              " Parameter containing:\n",
              " tensor([ 0.0560,  0.0377,  0.0057, -0.0313,  0.0329,  0.0010,  0.0458,  0.0502,\n",
              "          0.0148, -0.0093, -0.0574, -0.0426,  0.0215, -0.0274, -0.0268,  0.0286,\n",
              "         -0.0435,  0.0010, -0.0369, -0.0543,  0.0357, -0.0559,  0.0144, -0.0385,\n",
              "          0.0154, -0.0340, -0.0166,  0.0328,  0.0065,  0.0575,  0.0121, -0.0144,\n",
              "          0.0436, -0.0070,  0.0520, -0.0334, -0.0331, -0.0337,  0.0324,  0.0276,\n",
              "         -0.0264, -0.0128, -0.0123, -0.0424,  0.0081, -0.0168,  0.0280, -0.0097,\n",
              "         -0.0151,  0.0073,  0.0189, -0.0444,  0.0397,  0.0144,  0.0144, -0.0279,\n",
              "         -0.0094,  0.0313, -0.0280,  0.0148, -0.0476,  0.0319,  0.0525,  0.0098,\n",
              "         -0.0032,  0.0574, -0.0247,  0.0394, -0.0185, -0.0198,  0.0387,  0.0144,\n",
              "          0.0181, -0.0364, -0.0318, -0.0319, -0.0209, -0.0113,  0.0486,  0.0195,\n",
              "          0.0514,  0.0142,  0.0338,  0.0489, -0.0235,  0.0339,  0.0230,  0.0017,\n",
              "          0.0048, -0.0224,  0.0102,  0.0425,  0.0427,  0.0538,  0.0414, -0.0343,\n",
              "         -0.0307, -0.0190,  0.0043, -0.0472], requires_grad=True),\n",
              " Parameter containing:\n",
              " tensor([[ 9.7325e-02,  8.7591e-02, -5.7399e-02, -5.0777e-02,  6.3901e-02,\n",
              "          -9.7844e-02,  7.7451e-02, -8.9661e-02, -5.9668e-02,  2.7863e-02,\n",
              "           7.8732e-02,  2.2691e-02,  3.0495e-02,  7.4295e-02,  3.6675e-03,\n",
              "           5.6877e-02, -1.6542e-02,  3.4909e-02,  2.2271e-02, -6.8552e-02,\n",
              "           1.9889e-02,  2.3681e-02,  7.5262e-02,  5.2316e-02, -2.0367e-02,\n",
              "          -8.4190e-03,  6.9884e-02,  4.7293e-02, -6.0438e-02,  8.9484e-02,\n",
              "           9.4532e-02,  3.3239e-03, -1.8926e-02,  5.0542e-02,  8.4555e-02,\n",
              "          -1.3998e-02,  3.6194e-02, -8.4451e-02, -6.0974e-02,  8.4436e-02,\n",
              "           2.2028e-02, -7.8650e-02, -6.9055e-02,  8.1727e-02, -3.1277e-02,\n",
              "          -7.6581e-03, -4.5750e-02,  4.6786e-02, -4.1936e-02,  3.1149e-02,\n",
              "           2.1068e-02, -3.4598e-02,  3.5769e-02, -4.9042e-03,  1.6579e-02,\n",
              "           9.6536e-02,  2.1490e-02,  8.3133e-02, -9.5279e-02, -3.8576e-02,\n",
              "           7.5502e-02,  2.5753e-02,  9.7845e-02, -6.6679e-02,  7.2079e-02,\n",
              "          -8.7940e-02, -2.9266e-02, -8.3149e-02, -9.5243e-03, -6.4125e-02,\n",
              "          -2.4442e-02,  5.6286e-02, -6.5710e-02,  2.8671e-03, -4.0947e-02,\n",
              "           2.2608e-02,  7.6910e-02,  8.3322e-03, -3.6607e-02,  7.9162e-02,\n",
              "           3.3784e-02,  4.7364e-02,  7.4571e-03, -5.8871e-02, -6.3857e-02,\n",
              "           2.4625e-04,  8.0541e-02,  4.1576e-02,  7.2637e-03,  5.9209e-02,\n",
              "          -6.0096e-02,  1.9262e-02, -8.3954e-02, -5.8986e-02,  9.0295e-02,\n",
              "           8.4186e-02, -9.4266e-02, -2.1867e-02,  6.4480e-02, -5.9227e-03],\n",
              "         [ 4.4517e-02, -4.7317e-02, -9.7083e-02,  4.7966e-02, -5.7054e-02,\n",
              "           2.3915e-02, -7.3518e-02,  8.8439e-02, -6.2989e-02,  4.5298e-02,\n",
              "           7.2603e-02, -3.7521e-02, -7.1733e-02, -6.5890e-02, -2.3985e-02,\n",
              "          -9.2900e-02, -8.5765e-02, -1.9114e-02,  7.7820e-02, -3.9117e-02,\n",
              "           2.8290e-02,  6.5063e-02, -8.0967e-02, -3.1708e-03,  2.6534e-03,\n",
              "          -2.0040e-02,  5.6739e-03,  2.2404e-02, -8.1702e-02,  7.1682e-02,\n",
              "           7.2038e-02,  7.9989e-02,  1.6809e-02, -5.4991e-02, -2.6371e-02,\n",
              "          -9.2516e-02,  6.8418e-02,  5.7223e-02,  7.7395e-02, -1.2088e-02,\n",
              "          -1.8924e-03,  9.3779e-02,  4.2624e-02,  4.9802e-02, -3.7159e-02,\n",
              "          -8.7571e-02, -1.2058e-03,  3.5523e-03,  5.4936e-02, -5.7873e-02,\n",
              "          -9.4947e-02,  9.8354e-02, -6.3490e-03, -3.6365e-02, -1.4412e-02,\n",
              "          -2.8941e-02, -5.3283e-02,  8.8333e-02,  7.6037e-03, -1.1392e-02,\n",
              "          -7.6545e-02,  4.5432e-02,  1.9933e-02,  9.0058e-02, -3.3939e-02,\n",
              "          -3.6613e-02, -3.5673e-02, -2.7181e-02,  4.3323e-02, -3.9692e-02,\n",
              "           6.9636e-02, -8.0558e-02,  3.5352e-02, -6.4783e-02,  5.8431e-02,\n",
              "           5.8250e-02, -6.4634e-02,  8.0662e-03, -6.1135e-02, -9.0774e-02,\n",
              "          -4.2279e-02, -1.9734e-02, -5.0759e-02,  1.4614e-02,  3.6751e-02,\n",
              "           2.6778e-03, -4.2345e-02,  5.7991e-02,  2.8856e-03,  5.7489e-03,\n",
              "          -9.9782e-02, -7.7276e-02,  6.2953e-02,  9.8646e-02, -2.7289e-02,\n",
              "           9.4742e-02, -3.6829e-02, -5.7184e-02, -8.9078e-02, -3.3478e-02],\n",
              "         [ 1.9917e-02,  8.1984e-02, -6.3098e-02, -6.1792e-02,  5.5354e-02,\n",
              "          -8.3737e-02,  2.2424e-02,  7.6240e-02,  1.1283e-02, -7.1934e-03,\n",
              "          -8.6958e-03, -2.9383e-02,  3.1941e-02, -7.5456e-03, -2.5445e-02,\n",
              "          -8.9510e-02,  1.1688e-02, -7.8192e-02, -9.5844e-02, -1.6111e-02,\n",
              "          -9.9895e-02, -3.0839e-02,  9.8281e-02,  4.1670e-02, -8.3631e-02,\n",
              "          -8.7509e-02, -2.1876e-02,  7.5334e-02,  2.0427e-02,  4.6309e-02,\n",
              "           1.0441e-02, -2.7683e-02,  7.9232e-02, -2.2684e-02,  7.3022e-02,\n",
              "           8.5572e-02, -3.1642e-02, -4.9068e-02, -7.2430e-02, -9.0629e-02,\n",
              "          -4.1065e-02, -6.2234e-02,  9.0417e-03,  5.6580e-02,  5.3824e-02,\n",
              "          -8.6290e-02,  4.0454e-02, -5.3924e-02, -5.8190e-02,  3.2222e-02,\n",
              "          -6.9034e-03,  6.9933e-02, -9.2685e-02, -6.6064e-02,  8.9630e-02,\n",
              "           4.1643e-02,  5.9154e-02, -2.9196e-02, -9.9754e-02,  3.4827e-02,\n",
              "           3.3243e-02, -2.7499e-03, -3.1048e-04,  8.6357e-03,  8.9929e-02,\n",
              "          -7.4851e-02, -5.7604e-02,  2.7248e-03, -6.5199e-02, -8.8457e-03,\n",
              "          -6.5191e-02,  5.9179e-02, -4.7826e-02,  3.9963e-02, -8.7478e-02,\n",
              "           6.0830e-02, -8.6941e-03, -1.5406e-02, -4.6186e-02,  1.5868e-02,\n",
              "          -1.0187e-02, -5.8708e-02, -2.4776e-02, -4.2117e-02,  3.0066e-02,\n",
              "          -8.7690e-02, -7.1911e-02, -3.9276e-02,  8.8320e-02, -7.5817e-02,\n",
              "           8.8151e-02,  4.4594e-02, -7.4752e-02,  5.7244e-02, -9.0686e-03,\n",
              "           3.4691e-02, -9.8087e-03,  2.5464e-02, -7.0347e-02,  6.5918e-02],\n",
              "         [ 7.5945e-02,  7.9873e-02, -7.2703e-02, -7.3198e-03,  9.1931e-02,\n",
              "           4.2497e-02, -3.1379e-02,  4.9905e-02, -8.4323e-02,  3.2302e-02,\n",
              "          -5.7067e-02,  3.5047e-02,  6.1109e-02,  8.3890e-02, -2.1222e-03,\n",
              "          -8.8181e-02,  9.7905e-02, -6.0650e-02, -1.4209e-02,  5.7217e-02,\n",
              "           4.4490e-02, -2.1534e-02, -3.1013e-02,  4.9304e-02,  6.9044e-02,\n",
              "          -2.9402e-02, -6.6929e-02, -6.0405e-02, -7.6505e-02, -4.6691e-02,\n",
              "          -6.9567e-02,  5.4481e-02,  4.7808e-02, -8.6496e-03, -6.7104e-02,\n",
              "           4.2013e-04,  9.5764e-02, -9.9947e-02,  1.9953e-02,  9.7913e-03,\n",
              "          -9.2397e-02,  1.3295e-02, -8.3784e-02, -9.4296e-02,  2.1758e-02,\n",
              "          -7.3041e-02,  5.4003e-02, -4.7717e-02,  6.9943e-02, -4.7004e-02,\n",
              "          -7.4476e-02,  9.0351e-02,  3.7974e-02, -9.6164e-02,  2.4794e-02,\n",
              "           7.8864e-02, -9.4279e-02, -9.6160e-02, -4.3735e-02, -1.4684e-02,\n",
              "          -5.8274e-02,  8.1155e-02,  7.8843e-02, -5.7870e-02, -6.3429e-02,\n",
              "          -1.2530e-02, -9.3231e-02,  9.5980e-04, -4.9643e-02,  1.3680e-02,\n",
              "           4.6422e-03, -2.5842e-02, -7.6422e-02, -3.0111e-02, -5.6853e-02,\n",
              "          -5.5382e-02,  1.9648e-02,  4.8874e-02,  6.5710e-02, -1.6013e-02,\n",
              "           6.7708e-02, -3.0909e-02, -8.0956e-02,  7.0886e-02, -5.7574e-03,\n",
              "           5.1025e-02, -2.9833e-02,  6.7964e-02, -8.8407e-02,  4.1032e-02,\n",
              "          -7.9783e-02, -8.8722e-02,  7.7703e-02, -5.1023e-02,  3.4424e-02,\n",
              "          -9.7244e-02,  9.9372e-02, -2.3839e-02, -3.9248e-02, -5.6425e-03],\n",
              "         [-2.2874e-02, -4.5423e-02,  7.6068e-02, -4.9679e-02,  5.5704e-02,\n",
              "          -8.8882e-02,  8.6395e-02,  4.9966e-02, -7.2415e-02, -5.3719e-02,\n",
              "           9.5752e-02, -8.9410e-02,  2.3651e-02, -4.9595e-02, -5.5742e-02,\n",
              "          -3.8828e-02,  2.0267e-02,  4.2433e-02,  3.1726e-02,  2.8325e-02,\n",
              "          -2.4385e-02, -3.4630e-02,  9.8198e-02,  9.5898e-02,  2.9807e-02,\n",
              "          -9.8150e-02, -6.7284e-02,  7.0691e-02,  3.0494e-05,  3.7643e-02,\n",
              "           3.7248e-02, -2.1947e-02,  5.7790e-02, -3.9125e-02, -4.3825e-02,\n",
              "           9.6472e-02, -1.8441e-02,  3.1315e-02,  4.1865e-02,  7.2042e-02,\n",
              "           7.5026e-02, -6.5597e-02, -8.6383e-02,  7.4835e-02,  6.1009e-02,\n",
              "           7.3721e-02, -1.3081e-02,  5.4655e-02, -3.1093e-02, -4.2556e-02,\n",
              "           3.5771e-02,  9.0511e-02, -5.3753e-02,  8.5264e-02, -4.9267e-02,\n",
              "          -8.0379e-02,  3.7689e-02,  8.6704e-02,  4.9465e-02, -6.4835e-02,\n",
              "           5.8971e-02,  7.3980e-02,  1.2812e-02,  7.4534e-02,  6.9851e-03,\n",
              "          -5.7990e-02,  4.3473e-02, -6.9257e-02,  3.2421e-02,  5.9937e-02,\n",
              "          -7.9649e-02, -9.5533e-02, -8.7126e-02, -1.3430e-02,  7.2217e-02,\n",
              "          -6.6659e-02, -6.3840e-02,  8.7525e-02, -3.3375e-02, -3.8079e-03,\n",
              "           2.1114e-02, -9.3869e-02, -3.8335e-02, -8.2763e-02, -8.0557e-02,\n",
              "           9.2379e-02, -4.6051e-02, -9.7399e-02,  8.9783e-02,  2.0109e-02,\n",
              "           2.9882e-02,  4.2559e-02, -8.9680e-02, -7.5346e-02,  8.4223e-02,\n",
              "          -3.1809e-02,  2.4584e-02, -4.6460e-02,  1.6047e-02, -1.0191e-02],\n",
              "         [-4.2754e-02,  9.0047e-02,  1.6152e-02,  5.6011e-02, -5.9901e-02,\n",
              "          -6.8798e-02,  4.8404e-03,  3.7827e-02,  5.7681e-02,  2.8012e-02,\n",
              "           6.8254e-02,  3.8848e-02, -6.1913e-02, -2.1547e-02, -9.3138e-02,\n",
              "           5.8012e-02,  2.2893e-02, -9.2421e-02, -7.0875e-03,  6.0653e-03,\n",
              "          -7.5042e-02,  4.5309e-02,  3.3465e-03, -5.6697e-02, -2.5890e-02,\n",
              "          -5.7987e-02, -6.7928e-02, -9.9154e-03, -6.3099e-02, -2.5538e-02,\n",
              "           7.2947e-02,  3.4077e-02, -4.4864e-02,  1.9781e-02, -6.0482e-02,\n",
              "           2.6136e-02, -4.6323e-02,  6.9556e-02, -3.2258e-02,  7.8100e-02,\n",
              "           8.7844e-02,  5.1700e-02, -6.4350e-02,  6.8235e-02, -4.4219e-02,\n",
              "           8.8682e-02, -8.4205e-02,  4.4874e-02,  3.7447e-02,  7.4174e-02,\n",
              "           3.3601e-02,  1.8377e-02,  6.6862e-02,  1.0173e-02,  4.6802e-02,\n",
              "           1.3736e-02, -1.4258e-02,  5.6546e-02,  1.0804e-02, -9.6126e-02,\n",
              "           4.2771e-02, -4.5249e-02,  2.2093e-02,  9.2603e-02,  4.5765e-02,\n",
              "          -9.4812e-02, -7.1534e-02,  8.3725e-02,  3.6976e-02,  5.8528e-02,\n",
              "           2.9263e-02,  2.4069e-02,  5.1614e-03,  4.0927e-02,  4.5343e-02,\n",
              "           7.2112e-02, -7.7270e-02,  6.0166e-02, -7.1604e-02,  3.7755e-02,\n",
              "           6.0995e-02, -8.2660e-02, -4.1410e-02,  9.1743e-02,  6.8697e-02,\n",
              "           7.0310e-02,  7.2167e-04, -3.6178e-02,  7.4597e-02, -1.1173e-02,\n",
              "           4.1387e-02, -9.1341e-02,  2.0685e-02,  6.7628e-02,  5.6985e-03,\n",
              "          -9.1853e-02,  6.9585e-03,  5.6505e-02,  5.3404e-02, -2.6613e-02],\n",
              "         [ 5.7574e-02, -4.3037e-02, -9.4119e-02,  1.8741e-02, -5.5538e-03,\n",
              "          -3.5464e-02,  5.8317e-02,  2.0414e-02, -9.5514e-02, -7.2620e-02,\n",
              "           7.9442e-02,  3.3282e-02, -1.4241e-02,  4.5787e-02, -3.3330e-02,\n",
              "          -5.6834e-02,  1.9169e-02, -9.8789e-02,  9.2752e-02,  4.4366e-02,\n",
              "          -8.4275e-02, -9.9271e-02,  1.6644e-02, -1.2145e-02,  6.9190e-02,\n",
              "          -8.1326e-02,  2.1558e-02,  6.9786e-02,  8.2054e-02,  7.4190e-02,\n",
              "          -6.3519e-02,  3.2613e-02, -3.7247e-02,  5.2048e-03, -1.4203e-02,\n",
              "          -5.7730e-02, -9.1830e-02, -5.5645e-02, -1.9263e-02, -3.8953e-02,\n",
              "           5.0542e-02,  5.2406e-02,  9.6999e-02, -7.6748e-02, -1.4627e-02,\n",
              "          -4.0916e-02, -1.4815e-02, -4.2747e-02, -5.8315e-02, -7.3305e-03,\n",
              "          -5.9551e-02,  3.1099e-02, -7.6059e-02,  2.0012e-02,  7.5228e-02,\n",
              "           5.5599e-02, -2.1657e-02, -7.5258e-02, -6.0510e-02, -4.5323e-03,\n",
              "          -9.8365e-02,  8.7419e-03,  6.0115e-02,  2.9774e-02,  4.9239e-02,\n",
              "           6.4485e-04,  7.4161e-02, -4.4032e-03,  2.5394e-02, -4.9265e-02,\n",
              "           9.6182e-02, -5.3320e-02,  2.3704e-02, -6.2069e-02, -2.7073e-02,\n",
              "          -7.6148e-02, -1.4766e-02, -4.5512e-02, -3.8602e-02, -5.2778e-02,\n",
              "           1.7724e-02, -6.3361e-02, -5.9395e-02, -1.7238e-02, -5.1585e-02,\n",
              "          -3.6735e-02,  7.9609e-02, -9.4768e-02,  2.3649e-02,  8.5402e-02,\n",
              "          -6.5767e-02, -9.1898e-02, -2.9663e-02,  7.6740e-02,  7.7060e-02,\n",
              "           2.8881e-02,  3.7121e-02,  9.7070e-03,  5.1488e-02,  7.4300e-02],\n",
              "         [ 3.4271e-02, -5.9166e-02, -8.0451e-02,  1.8846e-02,  3.0856e-02,\n",
              "          -2.1741e-02,  3.1126e-02,  8.8510e-02,  7.9831e-02,  1.2955e-02,\n",
              "           4.9828e-02, -4.7870e-02, -9.8185e-02, -8.9466e-02,  3.4845e-02,\n",
              "           3.4004e-02,  1.5911e-03,  3.8202e-02, -7.0797e-02,  7.6823e-02,\n",
              "           3.0178e-02, -5.2037e-02,  5.1190e-02, -5.6845e-03,  9.0074e-03,\n",
              "          -5.9020e-02,  6.4637e-02, -6.8235e-02, -7.3321e-02,  4.3743e-02,\n",
              "           4.5773e-02,  7.7823e-02, -1.4848e-02, -7.6440e-02,  9.9190e-02,\n",
              "           8.5976e-02, -9.5933e-02,  6.1538e-02,  2.2745e-02,  4.6321e-02,\n",
              "           2.1427e-02, -6.6471e-02,  9.9181e-02,  4.4651e-02,  9.8608e-02,\n",
              "           2.9218e-02,  4.6326e-02,  7.9434e-03, -6.1184e-02, -2.8236e-02,\n",
              "          -6.6266e-02, -8.6019e-02,  2.5472e-02,  4.8351e-02, -4.0249e-02,\n",
              "           3.9483e-02,  5.3506e-03, -8.2372e-02,  6.5965e-02,  8.6055e-03,\n",
              "           2.5102e-03, -6.4738e-02,  8.1302e-02,  3.6133e-02,  2.4282e-03,\n",
              "          -3.6331e-02,  2.6479e-02, -2.0350e-02, -9.2959e-02, -7.0433e-02,\n",
              "          -1.3026e-02,  3.8936e-02,  3.1443e-02, -6.3038e-02, -8.1962e-03,\n",
              "          -6.9205e-02, -7.7629e-02,  6.3622e-02,  3.6316e-02, -9.4378e-03,\n",
              "           1.8600e-02,  3.9148e-02,  8.0279e-02,  4.6200e-02,  9.1619e-02,\n",
              "           7.1805e-03, -7.3494e-02, -7.8447e-02, -6.8126e-02,  1.8500e-02,\n",
              "           8.4325e-02,  5.5622e-02,  3.7610e-02,  3.9365e-02,  2.3801e-02,\n",
              "          -7.1444e-02, -6.7064e-02,  8.1543e-02,  9.8812e-02, -6.8569e-02],\n",
              "         [-5.8133e-02, -5.3567e-02, -1.9386e-02, -6.0905e-02,  4.0445e-02,\n",
              "          -8.3990e-02,  4.0628e-02,  3.9180e-02, -6.5960e-02, -8.0886e-02,\n",
              "           5.2965e-02,  7.3791e-02,  3.8648e-02,  6.9507e-02,  5.3228e-02,\n",
              "           7.6300e-03,  3.9111e-02, -9.2733e-04,  2.6282e-02,  3.8964e-02,\n",
              "           5.1984e-02, -8.0592e-03,  9.7650e-02,  2.9826e-02,  9.4730e-02,\n",
              "           8.0526e-02, -5.9786e-02, -6.7881e-02,  4.3996e-02,  4.9027e-02,\n",
              "           6.2993e-02, -1.9889e-02,  7.2974e-04, -5.8924e-02,  2.3375e-02,\n",
              "           8.6088e-02,  8.2948e-02,  9.3983e-02,  6.2729e-02,  3.5652e-02,\n",
              "          -4.2340e-03, -3.1648e-02, -7.2781e-02,  2.9126e-02, -2.6872e-02,\n",
              "          -8.5616e-02, -1.5908e-02, -4.3016e-02,  9.5066e-02, -9.1059e-02,\n",
              "          -3.5619e-02,  7.7223e-02, -2.7633e-02,  1.9152e-02, -6.8282e-02,\n",
              "           9.7801e-02, -7.0836e-02,  4.1324e-02, -1.7156e-02, -6.3136e-02,\n",
              "           7.6058e-02, -2.8784e-02,  1.2998e-02, -8.0711e-02, -1.4595e-02,\n",
              "           8.3139e-03, -6.8309e-02, -7.3032e-02, -6.8953e-02, -4.7075e-02,\n",
              "          -7.0743e-02, -5.3230e-02,  6.7518e-02,  6.3225e-02, -2.4345e-03,\n",
              "           9.4110e-02,  7.2645e-02,  1.8795e-02, -3.3068e-02,  5.5536e-02,\n",
              "          -4.4176e-02,  6.8411e-02, -7.1236e-02, -8.5212e-02, -7.1288e-02,\n",
              "           2.6858e-02, -9.5023e-02, -5.1921e-02, -6.9560e-02,  3.2408e-02,\n",
              "           5.0603e-02,  6.1702e-02, -2.7686e-02,  8.7881e-02,  5.7065e-02,\n",
              "           4.6035e-02, -2.7983e-02,  3.0196e-02,  1.4605e-02,  1.6404e-02],\n",
              "         [-7.8620e-02, -7.4995e-02, -9.2257e-02,  2.9770e-02,  4.5653e-02,\n",
              "          -4.3088e-02,  6.2971e-02,  3.6607e-02, -2.0514e-02,  1.9956e-02,\n",
              "          -5.4989e-02, -7.2648e-02, -1.5525e-02,  1.2266e-02, -7.8555e-02,\n",
              "          -2.1074e-02,  6.1890e-02, -6.9646e-02,  7.6974e-02,  7.3381e-02,\n",
              "           2.8077e-02, -4.9786e-02,  4.1295e-02,  9.7737e-02,  5.4562e-02,\n",
              "          -3.3238e-02, -9.2479e-03, -6.8729e-02,  8.2427e-03, -7.8909e-02,\n",
              "          -9.4256e-02,  3.2310e-02, -9.8182e-02, -6.4413e-02,  9.7341e-02,\n",
              "          -1.6817e-02, -4.8833e-02, -3.7540e-02,  5.5953e-02, -9.8046e-02,\n",
              "           6.4980e-02, -5.7951e-02, -9.0538e-02, -3.8916e-02, -4.9864e-02,\n",
              "           6.3236e-02,  8.0128e-02, -4.9757e-02, -6.7423e-02, -5.8444e-02,\n",
              "          -6.7067e-02,  4.8385e-03, -2.8253e-02, -7.9945e-03,  5.7124e-02,\n",
              "           1.9286e-02, -7.5935e-02,  8.6483e-02, -7.7969e-03,  2.2110e-02,\n",
              "           2.9120e-02,  5.9074e-02, -5.3617e-02,  4.0310e-02,  9.9196e-03,\n",
              "           3.0553e-02, -5.5159e-02, -1.6621e-02,  1.7814e-02, -9.7704e-02,\n",
              "           1.3548e-02,  9.4273e-02,  3.4982e-02,  1.2561e-02, -1.5373e-02,\n",
              "          -6.7435e-02,  8.6263e-02,  3.2525e-02, -8.1690e-02,  4.7605e-02,\n",
              "           1.9474e-02, -3.1095e-02,  1.1034e-02, -3.3651e-02,  8.8929e-02,\n",
              "          -8.4780e-03,  4.0436e-02,  6.4199e-02, -1.2906e-02,  8.1093e-02,\n",
              "           2.2619e-02,  5.6818e-02, -7.3843e-02, -3.8490e-02,  6.5907e-03,\n",
              "          -9.6316e-03,  3.6519e-02,  9.3094e-02,  4.4250e-02,  3.2008e-02]],\n",
              "        requires_grad=True),\n",
              " Parameter containing:\n",
              " tensor([-0.0074, -0.0601, -0.0837,  0.0562,  0.0948, -0.0729,  0.0008, -0.0901,\n",
              "          0.0263, -0.0592], requires_grad=True)]"
            ]
          },
          "metadata": {},
          "execution_count": 32
        }
      ],
      "execution_count": 32
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.284284Z",
          "start_time": "2025-02-19T08:18:47.280863Z"
        },
        "id": "sM-_mQXqS4rs"
      },
      "source": [
        "# model.state_dict()  # 这种方法用于保存模型参数，看能看见参数属于模型的哪一部分"
      ],
      "outputs": [],
      "execution_count": 33
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VnRTRbl_S4rs"
      },
      "source": [
        "## 训练\n",
        "\n",
        "pytorch的训练需要自行实现，包括\n",
        "1. 定义损失函数\n",
        "2. 定义优化器\n",
        "3. 定义训练步\n",
        "4. 训练"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.335998Z",
          "start_time": "2025-02-19T08:18:47.321183Z"
        },
        "id": "1ChADn92S4rs"
      },
      "source": [
        "# 1. 定义损失函数 采用交叉熵损失\n",
        "loss_fct = nn.CrossEntropyLoss() #内部先做softmax，然后计算交叉熵\n",
        "# 2. 定义优化器 采用SGD\n",
        "# Optimizers specified in the torch.optim package,随机梯度下降\n",
        "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)"
      ],
      "outputs": [],
      "execution_count": 34
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.389849Z",
          "start_time": "2025-02-19T08:18:47.366912Z"
        },
        "id": "k_EWDd1zS4rs"
      },
      "source": [
        "from sklearn.metrics import accuracy_score\n",
        "\n",
        "@torch.no_grad() # 装饰器，禁止反向传播，节省内存\n",
        "def evaluating(model, dataloader, loss_fct):\n",
        "    loss_list = [] # 记录损失\n",
        "    pred_list = [] # 记录预测\n",
        "    label_list = [] # 记录标签\n",
        "    for datas, labels in dataloader:#10000/32=312\n",
        "        datas = datas.to(device) # 转到GPU\n",
        "        labels = labels.to(device) # 转到GPU\n",
        "        # 前向计算\n",
        "        logits = model(datas)\n",
        "        loss = loss_fct(logits, labels)         # 验证集损失\n",
        "        loss_list.append(loss.item()) # 记录损失\n",
        "\n",
        "        preds = logits.argmax(axis=-1)    # 验证集预测,argmax返回最大值索引\n",
        "        # print(preds)\n",
        "        pred_list.extend(preds.cpu().numpy().tolist())#将PyTorch张量转换为NumPy数组。只有当张量在CPU上时，这个转换才是合法的\n",
        "        # print(preds.cpu().numpy().tolist())\n",
        "        label_list.extend(labels.cpu().numpy().tolist())\n",
        "\n",
        "    acc = accuracy_score(label_list, pred_list) # 计算准确率\n",
        "    return np.mean(loss_list), acc\n"
      ],
      "outputs": [],
      "execution_count": 35
    },
    {
      "cell_type": "code",
      "source": [
        "1875*20"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.412964Z",
          "start_time": "2025-02-19T08:18:47.407850Z"
        },
        "id": "g3lf5L_gS4rt",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "e73e92f6-db6b-40ac-e02f-63d6c50457b3"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "37500"
            ]
          },
          "metadata": {},
          "execution_count": 36
        }
      ],
      "execution_count": 36
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.485105Z",
          "start_time": "2025-02-19T08:18:47.456841Z"
        },
        "id": "jI-i59wRS4rt",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 49,
          "referenced_widgets": [
            "a550413c36854e8ba9fd83eab2df21d0",
            "79060dabdb3d4919906674483b900b34",
            "47d1bd1d293845c88b1a29427bbb5cbe",
            "083414195c62499d9fc6202f21f24af1",
            "2052e0383e3742648eccb05cc0a1097a",
            "e5548a798bb2410c96fe00a1e224344a",
            "beb9720c9da942949f6ed401df4f2021",
            "ddff3615be6c4ed79650aec490828a49",
            "cab9031c92da4623bf033e67f7a6cee9",
            "6e616b33983b4e67988bb658920e87e8",
            "8152c99ab1b94d8f82a73a568511f25c"
          ]
        },
        "outputId": "86f9ff1c-274d-4515-8eca-a2f65675a4f4"
      },
      "source": [
        "# 训练\n",
        "def training(model, train_loader, val_loader, epoch, loss_fct, optimizer, eval_step=500):\n",
        "    record_dict = {\n",
        "        \"train\": [],\n",
        "        \"val\": []\n",
        "    }\n",
        "\n",
        "    global_step = 0\n",
        "    model.train()\n",
        "    with tqdm(total=epoch * len(train_loader)) as pbar: # 进度条 1875*20,60000/32=1875\n",
        "        for epoch_id in range(epoch): # 训练epoch次\n",
        "            # training\n",
        "            for datas, labels in train_loader: #执行次数是60000/32=1875\n",
        "                datas = datas.to(device) #datas尺寸是[batch_size,1,28,28]\n",
        "                labels = labels.to(device) #labels尺寸是[batch_size]\n",
        "                # 梯度清空\n",
        "                optimizer.zero_grad()\n",
        "                # 模型前向计算\n",
        "                logits = model(datas)\n",
        "                # 计算损失\n",
        "                loss = loss_fct(logits, labels)\n",
        "                # 梯度回传，loss.backward()会计算梯度，loss对模型参数求导\n",
        "                loss.backward()\n",
        "                # 调整优化器，包括学习率的变动等,优化器的学习率会随着训练的进行而减小，更新w,b\n",
        "                optimizer.step() #梯度是计算并存储在模型参数的 .grad 属性中，优化器使用这些存储的梯度来更新模型参数\n",
        "\n",
        "                preds = logits.argmax(axis=-1) # 训练集预测\n",
        "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())   # 计算准确率，numpy可以\n",
        "                loss = loss.cpu().item() # 损失转到CPU，item()取值,一个数值\n",
        "                # record\n",
        "\n",
        "                record_dict[\"train\"].append({\n",
        "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
        "                }) # 记录训练集信息，每一步的损失，准确率，步数\n",
        "\n",
        "                # evaluating\n",
        "                if global_step % eval_step == 0:\n",
        "                    model.eval() # 进入评估模式\n",
        "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
        "                    record_dict[\"val\"].append({\n",
        "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
        "                    })\n",
        "                    model.train() # 进入训练模式\n",
        "\n",
        "                # udate step\n",
        "                global_step += 1 # 全局步数加1\n",
        "                pbar.update(1) # 更新进度条\n",
        "                pbar.set_postfix({\"epoch\": epoch_id}) # 设置进度条显示信息\n",
        "\n",
        "    return record_dict\n",
        "\n",
        "\n",
        "epoch = 20 #改为40\n",
        "model = model.to(device)\n",
        "record = training(model, train_loader, val_loader, epoch, loss_fct, optimizer, eval_step=1000)"
      ],
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/37500 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "a550413c36854e8ba9fd83eab2df21d0"
            }
          },
          "metadata": {}
        }
      ],
      "execution_count": 37
    },
    {
      "cell_type": "code",
      "source": [
        "record[\"train\"][-5:]"
      ],
      "metadata": {
        "id": "VMO5NqVyS4rt",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "0d6f8362-df6f-4868-ac7a-20755630d04a"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[{'loss': 0.5094560980796814, 'acc': 0.84375, 'step': 37495},\n",
              " {'loss': 0.316909521818161, 'acc': 0.90625, 'step': 37496},\n",
              " {'loss': 0.44157537817955017, 'acc': 0.84375, 'step': 37497},\n",
              " {'loss': 0.26212602853775024, 'acc': 0.90625, 'step': 37498},\n",
              " {'loss': 0.4344969391822815, 'acc': 0.875, 'step': 37499}]"
            ]
          },
          "metadata": {},
          "execution_count": 38
        }
      ],
      "execution_count": 38
    },
    {
      "cell_type": "code",
      "source": [
        "record[\"val\"][-5:]"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.523597Z",
          "start_time": "2025-02-19T08:18:47.509881Z"
        },
        "id": "t6hFjI2tS4rt",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "1dd0be0e-6236-4bf7-96df-126589993346"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[{'loss': 0.37144428258315443, 'acc': 0.8688, 'step': 33000},\n",
              " {'loss': 0.3606048429759737, 'acc': 0.8713, 'step': 34000},\n",
              " {'loss': 0.3671319044340914, 'acc': 0.8695, 'step': 35000},\n",
              " {'loss': 0.3550026579715383, 'acc': 0.8711, 'step': 36000},\n",
              " {'loss': 0.3553559753460625, 'acc': 0.8746, 'step': 37000}]"
            ]
          },
          "metadata": {},
          "execution_count": 39
        }
      ],
      "execution_count": 39
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.551187Z",
          "start_time": "2025-02-19T08:18:47.528578Z"
        },
        "id": "TpMivz1vS4rt",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "fdb9b364-333b-44b0-97c7-fe63b74ce79b"
      },
      "source": [
        "#画线要注意的是损失是不一定在零到1之间的\n",
        "def plot_learning_curves(record_dict, sample_step=1000):\n",
        "    # build DataFrame\n",
        "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
        "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
        "    last_step = train_df.index[-1] # 最后一步的步数\n",
        "    # print(train_df.columns)\n",
        "    print(train_df['acc'])\n",
        "    print(val_df['acc'])\n",
        "    # plot\n",
        "    fig_num = len(train_df.columns) # 画几张图,分别是损失和准确率\n",
        "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5))\n",
        "    for idx, item in enumerate(train_df.columns):\n",
        "        # print(train_df[item].values)\n",
        "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
        "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
        "        axs[idx].grid() # 显示网格\n",
        "        axs[idx].legend() # 显示图例\n",
        "        axs[idx].set_xticks(range(0, train_df.index[-1], 5000)) # 设置x轴刻度\n",
        "        axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", range(0, last_step, 5000))) # 设置x轴标签\n",
        "        axs[idx].set_xlabel(\"step\")\n",
        "\n",
        "    plt.show()\n",
        "\n",
        "plot_learning_curves(record)  #横坐标是 steps"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "step\n",
            "0        0.09375\n",
            "1000     0.59375\n",
            "2000     0.62500\n",
            "3000     0.87500\n",
            "4000     0.81250\n",
            "5000     0.78125\n",
            "6000     0.65625\n",
            "7000     0.96875\n",
            "8000     0.84375\n",
            "9000     0.90625\n",
            "10000    0.90625\n",
            "11000    0.84375\n",
            "12000    0.68750\n",
            "13000    0.78125\n",
            "14000    0.81250\n",
            "15000    0.96875\n",
            "16000    0.81250\n",
            "17000    0.93750\n",
            "18000    0.96875\n",
            "19000    0.84375\n",
            "20000    0.87500\n",
            "21000    0.87500\n",
            "22000    0.84375\n",
            "23000    0.87500\n",
            "24000    0.96875\n",
            "25000    0.87500\n",
            "26000    0.90625\n",
            "27000    0.96875\n",
            "28000    0.90625\n",
            "29000    1.00000\n",
            "30000    0.90625\n",
            "31000    0.84375\n",
            "32000    0.87500\n",
            "33000    0.84375\n",
            "34000    0.84375\n",
            "35000    0.84375\n",
            "36000    0.96875\n",
            "37000    0.87500\n",
            "Name: acc, dtype: float64\n",
            "step\n",
            "0        0.1001\n",
            "1000     0.6690\n",
            "2000     0.7567\n",
            "3000     0.7935\n",
            "4000     0.7968\n",
            "5000     0.8130\n",
            "6000     0.8235\n",
            "7000     0.8273\n",
            "8000     0.8294\n",
            "9000     0.8355\n",
            "10000    0.8392\n",
            "11000    0.8439\n",
            "12000    0.8451\n",
            "13000    0.8464\n",
            "14000    0.8481\n",
            "15000    0.8489\n",
            "16000    0.8488\n",
            "17000    0.8517\n",
            "18000    0.8547\n",
            "19000    0.8365\n",
            "20000    0.8525\n",
            "21000    0.8506\n",
            "22000    0.8584\n",
            "23000    0.8621\n",
            "24000    0.8643\n",
            "25000    0.8662\n",
            "26000    0.8656\n",
            "27000    0.8609\n",
            "28000    0.8660\n",
            "29000    0.8650\n",
            "30000    0.8681\n",
            "31000    0.8650\n",
            "32000    0.8693\n",
            "33000    0.8688\n",
            "34000    0.8713\n",
            "35000    0.8695\n",
            "36000    0.8711\n",
            "37000    0.8746\n",
            "Name: acc, dtype: float64\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x500 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzoAAAHACAYAAABqJx3iAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAxe1JREFUeJzs3Xd8m/W1+PHPo+kd7xHHiZ29B1lNIMwMCARCW8oqqy1d0AukLSX9tdCUW9JbympLy20p5Ja2QEvLaBMgbkIgQMgiJoTEzvLI8N5L+/n98UiyHS/ZlizJOu/XSy/b8vNIx4pj6eic7/kqqqqqCCGEEEIIIcQIogt2AEIIIYQQQgjhb5LoCCGEEEIIIUYcSXSEEEIIIYQQI44kOkIIIYQQQogRRxIdIYQQQgghxIgjiY4QQgghhBBixJFERwghhBBCCDHiSKIjhBBCCCGEGHEMwQ7AFy6Xi7NnzxIfH4+iKMEORwghIoaqqjQ3NzN69Gh0OnlvzEOel4QQInh8fW4Ki0Tn7Nmz5OTkBDsMIYSIWKdOnWLMmDHBDiNkyPOSEEIEX3/PTWGR6MTHxwPaD5OQkDDg8+12O1u3bmXlypUYjUZ/h+dXEmvghFO8EmtghFOsEBrxNjU1kZOT4/07LDSR9LwE4RWvxBo44RSvxBoYoRKrr89NYZHoeNoCEhISBv2EEhMTQ0JCQlj8AkmsgRFO8UqsgRFOsUJoxSvtWV1F0vMShFe8EmvghFO8EmtghFqs/T03ScO1EEIIIYQQYsSRREcIIYQQQggx4kiiI4QQQgghhBhxwmKNjhAiNKmqisPhwGAwYLFYcDqdwQ6pT3a7PWxiheGJV6/XYzAYZA2OEEKIEUcSHSHEoNhsNsrLy2ltbSUzM5NTp06F/ItlVVXDJlYYvnhjYmLIysrCZDIF7D6EEEKI4SaJjhBiwFwuF8XFxej1ekaPHo3NZiMuLi7kN5R0uVy0tLSERawQ+HhVVcVms1FdXU1xcTGTJk0Ki8dFCCGE8IUkOkKIAbPZbLhcLnJycoiKiqKpqYmoqKiQf5Hscrmw2WxhESsMT7zR0dEYjUZKS0u99yWEEEKMBKH/TC+ECFnhkCyI/sm/oxBCiJFInt2EEEIIIYQQI44kOkIIIYQQQogRRxIdIYQYpNzcXJ588km/3NaOHTtQFIWGhga/3F4kee+991izZg2jR49GURRee+21fs/ZsWMH5513HmazmYkTJ7Jp06aAxymEEGJ4SaIjhIgoV111Fffdd59fbmvv3r18/etf98tticFrbW1lzpw5PP300z4dX1xczJVXXskll1xCQUEB9957L1/72td4++23AxypEEKI4SRT14QQohNVVXE6nRgM/f95TEtLG4aIRH+uuOIKrrjiCp+Pf+aZZ8jLy+Oxxx4DYNq0abz//vs88cQTrFq1KlBhCiGEGGYjPtH5bOfrRO94kCQlG1avDnY4QoxIqqrSZnMEZXpXtFHv82aad9xxBx988AEffPABv/rVrwB4/vnnueOOO9iyZQs/+tGP+PTTT9m6dSs5OTmsW7eOjz76iNbWVqZNm8bGjRtZvny59/Zyc3O59957uffeewFQFIU//OEPbN68mbfffpvs7Gwee+wxrr766kH9bP/4xz948MEHOXnyJFlZWXznO9/hu9/9rvf7v/3tb3niiSc4deoUo0aNYtmyZbzyyisAvPLKK2zYsIHjx48TExPDvHnzeP3114mNjR1ULCPJrl27uvw7Aqxatcr779gTq9WK1Wr1ft3U1ASA3W7HbrcPOAbPOYM5NxjCKV6JNXDCKd5QifXQmSae2HaM/3fFVMan9fz3N1Ri9UWoxOrr/Y/4RMdhbWO8swQL+mCHIsSIZbG7mPc/+UG578M/XUWMybc/ZU8++SRHjhxhzpw5PPzwwwB89tlnADzwwAP88pe/ZPz48SQlJXHq1ClWr17Nz372M8xmM3/6059Ys2YNRUVFjB07ttf72LBhA7/4xS949NFH+fWvf83NN99MaWkpycnJA/q59u/fzw033MADDzzALbfcwkcffcS3v/1tUlJSuP3229m3bx//9V//xQsvvMDSpUupq6tj586dAJSXl3PjjTfyi1/8gmuvvZbm5mZ27tyJqqoDimGkqqioICMjo8t1GRkZNDU10d7eTnR0dLdzNm7cyIYNG7pdv3XrVmJiYgYdS35+cP7fDFY4xSuxBk44xRvsWP9YpONgnQ57405umODq89hgxzoQwY61ra3Np+NGfKKjN2tPQGas/RwphBjpRo0ahclkIiYmhszMTAAKCwsB+OlPf8qKFSu8xyYnJzNnzhzv1w8//DCvvvoqb7zxBnfffXev93H77bdz4403AvDII4/wq1/9ij179nD55ZcPKNbHH3+cSy+9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\n"
          },
          "metadata": {}
        }
      ],
      "execution_count": 40
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xIS7IOgrS4rt"
      },
      "source": [
        "## 评估"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-02-19T08:18:47.552184Z",
          "start_time": "2025-02-19T08:18:47.552184Z"
        },
        "id": "HN97SZd8S4rt",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "ffa2a75f-4a5e-4c27-ba18-94c129052eb9"
      },
      "source": [
        "# dataload for evaluating\n",
        "\n",
        "model.eval() # 进入评估模式\n",
        "loss, acc = evaluating(model, val_loader, loss_fct)\n",
        "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "loss:     0.3597\n",
            "accuracy: 0.8706\n"
          ]
        }
      ],
      "execution_count": 41
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.7"
    },
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "accelerator": "GPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "a550413c36854e8ba9fd83eab2df21d0": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_79060dabdb3d4919906674483b900b34",
              "IPY_MODEL_47d1bd1d293845c88b1a29427bbb5cbe",
              "IPY_MODEL_083414195c62499d9fc6202f21f24af1"
            ],
            "layout": "IPY_MODEL_2052e0383e3742648eccb05cc0a1097a"
          }
        },
        "79060dabdb3d4919906674483b900b34": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_e5548a798bb2410c96fe00a1e224344a",
            "placeholder": "​",
            "style": "IPY_MODEL_beb9720c9da942949f6ed401df4f2021",
            "value": "100%"
          }
        },
        "47d1bd1d293845c88b1a29427bbb5cbe": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_ddff3615be6c4ed79650aec490828a49",
            "max": 37500,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_cab9031c92da4623bf033e67f7a6cee9",
            "value": 37500
          }
        },
        "083414195c62499d9fc6202f21f24af1": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_6e616b33983b4e67988bb658920e87e8",
            "placeholder": "​",
            "style": "IPY_MODEL_8152c99ab1b94d8f82a73a568511f25c",
            "value": " 37500/37500 [06:57&lt;00:00, 105.19it/s, epoch=19]"
          }
        },
        "2052e0383e3742648eccb05cc0a1097a": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "e5548a798bb2410c96fe00a1e224344a": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "beb9720c9da942949f6ed401df4f2021": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "ddff3615be6c4ed79650aec490828a49": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "cab9031c92da4623bf033e67f7a6cee9": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "6e616b33983b4e67988bb658920e87e8": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8152c99ab1b94d8f82a73a568511f25c": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}